clear
format long

global NG A B C POP_SIZE SELECTION_METHOD REPLACEMENT_METHOD REPRODUCTION_METHOD K Z Pmut PRECISION u p q a_acum SOLUCION;
%CONSTANTS
MAX_GENERATIONS = 100;
POP_SIZE = 100; %tamanio de la poblacion
PRECISION = 10; %cantidad de bits para representar el numero

SOLUCION = 'maximo'; %'minimo' para buscar el maximo o el minimo
NG = 3; %numero de grupo
A = 0.1 * NG;
B = 5 * NG;
C = 0.2 * NG;

SELECTION_METHOD = 'ELITE' ;% 'RANDOM';%
K = 0.2*POP_SIZE; %el k para la seleccion
REPLACEMENT_METHOD = 'ELITE';
REPRODUCTION_METHOD = 'METODO1';

%Z = 2; %para los torneos
Pmut = 0.001; %probabilidad de mutacion (del orden de 1/1000)

%inicializacion
a_acum = 0; %suma de todas las aptitudes
u = zeros (1, POP_SIZE); %vector de aptitudes
p = zeros (1, POP_SIZE); %vector de aptitudes relativas
q = zeros (1, POP_SIZE); %vector de aptitudes (relativas) acumuladas
pop = PopulationInit(); %population

%para plotear la funcion
load matlab.mat; %esta tiene paso = 0.00001;
paso = 0.00001;
t = 0:paso:1;

currGeneration = 0;
best = zeros(1, MAX_GENERATIONS);
promedio = zeros(1, MAX_GENERATIONS);
generation = 1:1:MAX_GENERATIONS;
while currGeneration < MAX_GENERATIONS
	parents = Selection(pop);
	offsprings  = Reproduction(parents);
	pop = Replacement(pop, offsprings);
	currGeneration = currGeneration + 1;

    %calculo las aptitudes de cada individuo
    for i=1:POP_SIZE
        u(i) = aptitud(pop(i,:));
        x(i) = ConvertIndividual(pop(i,:));
        y(i) = A + sin (x(i)*B*pi)*A + x(i)*C;
    end
    best(currGeneration) = max(u); %la aptitud del mejor
    promedio(currGeneration) = mean(u); %la aptitud media de la poblacion
   
    subplot(2,2,1:2); plot(t, f_x, '-k', x,y, 'xr');
    subplot(2,2,3:4); plot(generation, best, 'r', generation, promedio, 'g');
    drawnow; %pause(.2)
    %subplot(2,2,2); plot(y)
end



%resultado
[mejor_n mejor_idx] = max(u);
pop(mejor_idx, :)
nuestro=ConvertIndividual(pop(mejor_idx, :))

[maximo_real maxi] = max(f_x);
[minimo_real mini] = min(f_x);
maxi=maxi*paso
mini=mini*paso

clear
